home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / music / audio-ha.lha / audio.h < prev    next >
C/C++ Source or Header  |  1995-08-01  |  3KB  |  87 lines

  1. /*
  2.  * Audio Handler
  3.  *
  4.  * Copyright (c) 1992,1995 by Martin Brenner
  5.  *
  6.  * THIS INFORMATION IS PROVIDED "AS IS"; NO WARRANTIES ARE MADE.
  7.  * ALL USE IS AT YOUR OWN RISK, AND NO LIABILITY OR 
  8.  * RESPONSIBILITY IS ASSUMED.
  9.  *
  10.  * Data structures and prototypes
  11.  *
  12.  * $Header: Work:Progs/aud/RCS/audio.h,v 1.3 1995/08/01 03:05:47 martin Exp martin $
  13.  *
  14.  * $Log: audio.h,v $
  15.  * Revision 1.3  1995/08/01  03:05:47  martin
  16.  * Bug fixes for version 1.0 beta
  17.  *
  18.  * Revision 1.2  1995/07/19  10:05:40  martin
  19.  * first release version, 1.0 beta
  20.  *
  21.  * Revision 1.1  1995/07/04  20:05:03  martin
  22.  * Initial revision
  23.  *
  24.  */
  25. /*
  26.  * There are two buffers of size AUDIOBUFSIZE (double buffering).
  27.  * The requirement is that the size be a multiple of 2.
  28.  */
  29. #define AUDIOBUFSIZE (32*1024) /* 32kB buffers */
  30. #define CLOCK_CONSTANT_NTSC 3579545L
  31. #define CLOCK_CONSTANT_PAL 3546895L
  32. #define DEFAULT_FREQUENCY 8000L
  33. #define DEFAULT_PERIOD (CLOCK_CONSTANT_PAL/DEFAULT_FREQUENCY)
  34. #define DEFAULT_VOLUME 64
  35.  
  36. struct AudioOptions {
  37.     WORD    AO_Priority;        /* Audio priority */
  38.     WORD    AO_NumChannels;        /* number of possible channels */
  39.     UBYTE    *AO_Channels;        /* list of possible channel combinations */
  40.     LONG    AO_BufferSize;        /* size of audio buffers */
  41.     LONG    AO_Period;            /* Period */
  42.     LONG    AO_Debug;            /* Generate debugging - set debug number */
  43.     WORD    AO_Volume;            /* Volume */
  44. };
  45.  
  46. struct AudioBuffer {
  47.     UBYTE    *AB_Data;    /* buffer itself */
  48.     LONG    AB_Size;    /* length of buffer */
  49.     LONG    AB_End;        /* End of actual data in buffer */
  50.     WORD    AB_InUse;    /* Is the buffer currently used by audio.device? */
  51. };
  52.  
  53. struct AudioState {
  54.     struct List AS_ReadyQueue;    /* Queue for incoming write request packets, holds messages */
  55.     LONG    AS_BytesCopied;        /* bytes already copied from current write packet to audio buffer */
  56.     LONG    AS_OpenForOutput;    /* Has the device been opened ? */
  57.     struct AudioOptions AS_Options;    /* Audio Options */
  58.     struct AudioBuffer AS_Buffer1;
  59.     struct AudioBuffer AS_Buffer2;
  60.     struct AudioBuffer *AS_CurrentBuffer;    /* buffer currently played by audio.device */
  61.     struct AudioBuffer *AS_NextBuffer;        /* buffer being filled with data */
  62.     WORD    AS_AllocState;        /* allocation request status */
  63.     WORD    AS_LockState;        /* lock status */
  64.     struct IOAudio *AS_AllocIO;    /* iob used for allocating channel(s) */
  65.     struct IOAudio *AS_LockIO;    /* iob used for locking */
  66.     struct IOAudio *AS_IO1;        /* iob used for Buffer1 */
  67.     struct IOAudio *AS_IO2;        /* iob used for Buffer2 */
  68.     struct IOAudio *AS_CurrentIO;    /* iob currently played by audio.device */
  69.     struct IOAudio *AS_NextIO;        /* iob for buffer being filled with data */
  70.     struct DosPacket AS_DummyPacket;    /* Dummy packet used for IO-requests */
  71.     struct FileHandle *AS_FileHandle;    /* FileHandle for current DOS-IO */ 
  72. };
  73.  
  74. /* Allocation State values */
  75. #define ALLOCSTATE_UNUSED        1    /* nothing done yet */
  76. #define ALLOCSTATE_ALLOCATING    2    /* allocation request sent, but not yet satisfied */
  77. #define ALLOCSTATE_ALLOCATED    3    /* allocation request satisfied, channel(s) are allocated */
  78. #define ALLOCSTATE_FREEING        4    /* free request sent, but not yet returned */
  79. #define ALLOCSTATE_STOLEN        5    /* channel(s) stolen by another process */
  80.  
  81. /* Lock States */
  82. #define LOCKSTATE_UNUSED        1    /* not yet sent */
  83. #define LOCKSTATE_LOCKED        2    /* locking request sent, and not yet replied */
  84.  
  85. /* Prototypes for external functions */
  86. void __stdargs KPrintF(const char *, ...);
  87.